// Inclusion Check
#ifndef _Inc_Mem_
#define _Inc_Mem_

// -- Includes --

// C++
#include <cstdlib>
#include <iostream>

// -- Name Space --
namespace Kestrel
{
    
    // -- Structs --
    
    // -- Variables --
    
    // -- Functions --
    
    // Zero Page
        // Address
        unsigned char ZeroPageAddress(unsigned char Adr, unsigned char Value);
        // Value
        unsigned char ZeroPageValue(unsigned char Adr, unsigned char Value);
    
    // Absolute
        // Address
        unsigned short AbsoluteAddress(unsigned char Lower, unsigned char Upper);
        unsigned short AbsoluteAddress(unsigned char Lower, unsigned char Upper, unsigned char Value);
        unsigned short AbsoluteAddress(unsigned short Adr, unsigned char Value);
        // Value
        unsigned short AbsoluteValue(unsigned char Lower, unsigned char Upper);
        unsigned short AbsoluteValue(unsigned char Lower, unsigned char Upper, unsigned char Value);
        unsigned short AbsoluteValue(unsigned short Adr, unsigned char Value);
    
    // -- Class --
    
    // RAM
    class RAM
    {
     
     private:
            
            // Variables
            unsigned char* Memory;
        
            // Functions
        
     public:
    
            // Variables
                        
            // Functions
            RAM();
            ~RAM();
            void SetMemory(unsigned short Adr, unsigned char Value);
            unsigned char GetMemory(unsigned short Adr);
            void PushToStack(unsigned char Value);
            unsigned char PullFromStack();
    
    };
    
} // </Namespace>

// Inclusion check
#endif
